package jzbank.dao.serializabledao.impl;

import jzbank.common.exception.SyncException;
import jzbank.dao.serializabledao.DatabaseConfigDao;
import jzbank.pojo.comfig.DatabasePO;
import jzbank.util.SerializationUtil;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


@Repository
public class DatabaseConfigDaoImpl implements DatabaseConfigDao {
    
    private static final String DATA_FILE = "./dbconfig/database_po_data.ser"; // 数据文件的文件名

    // 添加数据库信息
    @Override
    public void addDatabasePo(DatabasePO databasePo) {
        List<DatabasePO> databasePoList = getAllDatabasePo();

        databasePoList.add(databasePo);
        SerializationUtil.serializeObjectToFile(databasePoList, DATA_FILE);

    }

    // 删除数据库信息
    @Override
    public void deleteDatabasePo(String id) {
        List<DatabasePO> databasePoList = getAllDatabasePo();
        databasePoList.removeIf(databasePo -> databasePo.getDbId().equals(id));

        SerializationUtil.serializeObjectToFile(databasePoList, DATA_FILE);

    }

    // 更新数据库信息
    @Override
    public void updateDatabasePo(DatabasePO updatedDatabasePo) {
        List<DatabasePO> databasePoList = getAllDatabasePo();
        for (int i = 0; i < databasePoList.size(); i++) {
            if (databasePoList.get(i).getDbId().equals(updatedDatabasePo.getDbId())) {
                databasePoList.set(i, updatedDatabasePo);
                break;
            }
        }

        SerializationUtil.serializeObjectToFile(databasePoList, DATA_FILE);

    }

    // 获取所有数据库信息
    @Override
    public List<DatabasePO> getAllDatabasePo() {
        List<DatabasePO> databasePoList = new ArrayList<>();
        Object obj = SerializationUtil.deserializeObjectFromFile(DATA_FILE);
        if (obj instanceof List<?>) {
            databasePoList = (List<DatabasePO>) obj;
        }

        return databasePoList;
    }

    // 根据数据库id查找数据库信息
    @Override
    public DatabasePO getDatabasePoByDbId(String dbId) {
        List<DatabasePO> databasePoList = getAllDatabasePo();
        DatabasePO databasePo = new DatabasePO();
        for (int i = 0; i < databasePoList.size(); i++) {
            if (databasePoList.get(i).getDbId().equals(dbId)) {
                databasePo = databasePoList.get(i);
                break;
            }
        }
        return databasePo;
    }

//    @Override
//    public DatabasePO getDatabasePoByName(String name) {
//        List<DatabasePO> databasePoList = getAllDatabasePo();
//        DatabasePO databasePo = new DatabasePO();
//        for (int i = 0; i < databasePoList.size(); i++) {
//            if (databasePoList.get(i).getDbId().equals(name)) {
//                databasePo = databasePoList.get(i);
//                break;
//            }
//        }
//        return databasePo;
//    }
}
